package com.utils
{
	import flash.display.DisplayObject;
	import flash.filters.ColorMatrixFilter;
	import flash.filters.ConvolutionFilter;
	import flash.geom.ColorTransform;

	/**
	 * 视图特效工具类 增加狂暴效果 暴击效果 中毒效果 减速效果 灰色色调(石化死亡已行动)
	 * 胶片效果 高级浮雕效果
	 */	
	public class EffectUtil
	{
		//公用一个浮雕滤镜 不必重复创建
		private static var convolArray:Array = [new ConvolutionFilter(3, 3, [-2, -1, 0, -1, 1, 1, 0, 1, 2])];
		//公用一个胶片滤镜 不必重复创建
		private static var digitalArray:Array = [new ColorMatrixFilter([-1, 0, 0, 0, 255, 0, -1, 0, 0, 255, 0, 0, -1, 0, 255, 0, 0, 0, 1, 0])];
		//公用一个灰度滤镜 不必重复创建
		private static var graysArray:Array = [new ColorMatrixFilter([0.3086, 0.6094, 0.0820, 0, 0, 0.3086, 0.6094, 0.0820, 0, 0, 0.3086, 0.6094, 0.0820, 0, 0, 0, 0, 0, 1, 0])];
		/**
		 * 设置灰度效果
		 * @param dpo
		 */		
		public static function graysEffect(dpo:DisplayObject):void{
			dpo.filters = graysArray;
		}
		/**
		 * 设置胶片效果
		 * @param dpo
		 */		
		public static function digitalEffect(dpo:DisplayObject):void{
			dpo.filters = digitalArray;
		}
		/**
		 * 设置浮雕效果
		 * @param dpo
		 */		
		public static function convolEffect(dpo:DisplayObject):void{
			dpo.filters = convolArray;
		}
		/**
		 * 实现增白发亮暴击效果
		 * @param display 目标显示对象
		 */
		public static function knockEffect(dpo:DisplayObject):void{
			changeColor(dpo,120,120,120);
		}
		/**
		 * 实现冰蓝减速效果
		 * @param display 目标显示对象
		 */
		public static function frostEffect(dpo:DisplayObject):void{
			changeColor(dpo,0,30,150);
		}
		/**
		 * 实现叶绿中毒效果
		 * @param display 目标显示对象
		 */
		public static function cruelEffect(dpo:DisplayObject):void{
			changeColor(dpo,0,120);
		}
		/**
		 * 烧伤效果或狂暴效果 视图泛红状态
		 * @param dpo
		 */		
		public static function burnEffect(dpo:DisplayObject):void{
			changeColor(dpo,125,20);
		}
		/**
		 * 将目标显示对象改成目标色调值 r,g,b表示偏移值
		 */		
		private static function changeColor(dpo:DisplayObject,
							r:int = 0,g:int = 0,b:int = 0):void{
			var ct:ColorTransform = dpo.transform.colorTransform;
			ct.redOffset = r;
			ct.greenOffset = g;
			ct.blueOffset = b;
			dpo.transform.colorTransform = ct;
		}
		/**
		 * 移除目标特效
		 * @param dpo
		 */		
		public static function removeEffect(dpo:DisplayObject):void{
			changeColor(dpo);
		}
		
	}
}